package com.xoa.service.work;

import com.xoa.model.enclosure.Attachment;
import com.xoa.model.flowRunFeedback.FlowRunFeedback;
import com.xoa.model.users.Users;
import com.xoa.model.workflow.FlowFast;
import com.xoa.model.workflow.FlowRunLog;
import com.xoa.model.workflow.FlowRunPrcs;
import com.xoa.util.AjaxJson;
import com.xoa.util.ToJson;
import com.xoa.util.common.wrapper.BaseWrapper;
import com.xoa.util.common.wrapper.BaseWrappers;
import org.apache.http.protocol.HTTP;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

public interface WorkService {
    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017年6月7日 上午10:31:07
     * 方法介绍:   快速新建
     * 参数说明:   @param request 请求
     * 参数说明:   @param flowId  流程id
     * 参数说明:   @param prcsId  步骤id对应flow_run_prcs的prcsId
     * 参数说明:   @param flowPrcs  流程实例步骤id对应flow_run_prcs的flowPrcs以及flow_procsee的prcsId
     * 参数说明:   @return
     * @return     ToJson<FlowFast>
     */
    public ToJson<FlowFast> workFastAdd(Users users, int flowId, int prcsId, String flowPrcs, String id,HttpServletRequest request,String sqlType, String runName, String preView );



    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017年6月26日 上午9:54:09
     * 方法介绍:   公共附件上传
     * 参数说明:   @param files 上传的文件
     * 参数说明:   @param fmodule 模块名
     * 参数说明:   @param runId  流程实例id
     * 参数说明:   @return
     * @return     ToJson<Attachment>
     */
    public ToJson<Attachment> workUpload(MultipartFile[] files, String company, String module ,String runId);
    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017年6月25日 上午9:54:09
     * 方法介绍:   转交保存表单数据
     * 参数说明:   @param flowId 流程id
     * 参数说明:   @param formdata 表单json串
     * 参数说明:   @param modifydata 有内容的表单json串
     * 参数说明:   @param formlength 表单长度
     * 参数说明:   @param runId  flowRun的流程实例Id
     * 参数说明:   @param runName flowRun的流程实例名称
     * 参数说明:   @param beginTime flowRun流程实例创建时间
     * 参数说明:   @param beginUser  flowRun流程发起人Id
     * 参数说明:   @return
     * @return     ToJson<FlowFast>
     */
    public ToJson<FlowFast> nextwork( String flowId, String formdata, String modifydata, String formlength, int runId,
                                      String runName, String beginTime, String beginUser, String sqlType, String prcsId,
                                      String fromDateReject,String tableName,String tabId,String flowPrcs,
                                      HttpServletRequest request);
    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017年6月7日 上午10:32:03
     * 方法介绍:   转交后保存
     * 参数说明:   @param runId  流程实例Id
     * 参数说明:   @param runName 流程实例名称
     * 参数说明:   @param flowId  流程id
     * 参数说明:   @param prcsId  流程实例步骤id
     * 参数说明:   @param prcsFlag  步骤状态
     * 参数说明:   @param flowPrcs  步骤id
     * 参数说明:   @param beginTime  流程实例创建时间
     * 参数说明:   @param beginUser 流程发起人id
     * 参数说明:   @param jingbanUser  经办人
     * 参数说明:   @return
     * @return     ToJson<FlowRunPrcs>
     */
    public ToJson<FlowRunPrcs> savework( String runId, String runName, String flowId, String prcsId, String prcsFlag,
                                         String flowPrcs, String beginTime, String beginUser, String jingbanUser, String viewUser, Users users, String currentPrcsId);
    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017年6月3日 上午9:54:09
     * 方法介绍:   查询表单数据
     * 参数说明:   @param flowId 流程id
     * 参数说明:   @param runId  flowRun的流程实例Id
     * 参数说明:   @return
     * @return     Map<String,Object>
     */
    public Map<String,Object> fastAdd( String runId, String flowId );

    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017年6月27日 上午10:32:03
     * 方法介绍:   保存会签意见
     * 参数说明:   @param runId  流程实例Id
     * 参数说明:   @param content 会签内容
     * 参数说明:   @param prcsId  流程实例步骤id
     * 参数说明:   @param flowPrcs  步骤id
     * 参数说明:   @param userId  用户userId
     * 参数说明:   @return
     * @return     ToJson<FlowRunPrcs>
     */
    public ToJson<FlowRunFeedback> workfeedback(String content, String runId, String prcsId, String flowPrcs,
                                                String userId);

    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017年6月27日 上午10:32:03
     * 方法介绍:   查找会签意见
     * 参数说明:   @param runId  流程实例Id
     * 参数说明:   @param content 会签内容
     * 参数说明:   @param prcsId  流程实例步骤id
     * 参数说明:   @param flowPrcs  步骤id
     * 参数说明:   @param feedback  会签
     * 参数说明:   @return
     * @return     ToJson<FlowRunFeedback>
     */
    public AjaxJson findworkfeedback(HttpServletRequest request,String runId, String prcsId, String flowPrcs, String userId, String company, String signlock,String PRCS_ID,String FLOW_PRCS);
    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017年6月28日 上午9:54:09
     * 方法介绍:   查找公共附件
     * 参数说明:   @param runId 流程实例Id
     * 参数说明:   @return
     * @return     ToJson<Attachment>
     */
    public ToJson<Attachment> findworkUpload(String runId, String  company);
    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017年6月27日 上午10:32:03
     * 方法介绍:   查询分支
     * 参数说明:   @param runId  流程实例Id
     * 参数说明:   @param flowId  流程实例步骤id
     * 参数说明:   @param flowPrcs  步骤id
     * 参数说明:   @return
     * @return     ToJson<FlowFast>
     */
    public AjaxJson findBranch(String flowId, String runId, String flowPrcs, Users users);
    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017年4月30日 上午9:52:22
     * 方法介绍:   删除工作流附件
     * 参数说明    @param runid 流程实例id
     * 参数说明:   @param aid 附件主键
     * 参数说明:   @param module 模块
     * 参数说明:   @param ym 年月
     * 参数说明:   @param attachmentId 附件id
     * 参数说明:   @param attachmenrName 附件名字
     * 参数说明:   @param company 公司
     * 参数说明:   @param response 响应
     * 参数说明:   @param request 请求
     * 参数说明:   @return
     */
    public ToJson delete(String runId,
                         @RequestParam("AID") String aid,
                         @RequestParam("MODULE") String module,
                         @RequestParam("YM") String ym,
                         @RequestParam("ATTACHMENT_ID") String attachmentId,
                         @RequestParam("ATTACHMENT_NAME") String attachmentName,
                         @RequestParam("COMPANY") String company,
                         HttpServletResponse response,
                         HttpServletRequest request);


    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017年6月27日 上午10:32:03
     * 方法介绍:   查询回退之前步骤
     * 参数说明:   @param runId  流程实例Id
     * 参数说明:   @param allowBack  回退状态
     * 参数说明:   @param prcsId  步骤id
     * 参数说明:   @return
     * @return     ToJson<FlowFast>
     */
    public ToJson<FlowRunPrcs> getflowprcsdata(String allowBack, String runId, String prcsId);


    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017年6月27日 上午10:32:03
     * 方法介绍:   回退步骤插入
     * 参数说明:   @param runId  流程实例Id
     * 参数说明:   @param flowPrcs 步骤id
     * 参数说明:   @param prcsId  流程实例步骤id
     * 参数说明:   @return
     * @return
     */
    public AjaxJson  insertprcsdata(String runId, String flowStep, String prcsId, String flowPrcs, Users users, String feedback);

    //获取表单设置
    public AjaxJson createGuide(String flowId, Users users, HttpServletRequest request);

    BaseWrapper getRunName(Users user, Integer flowId, Integer prcsId, String flowProcs);

    //导出表单
    public void exportExcel(Users users, String type, HttpServletResponse response);

    /**
     * 创建作者:   季佳伟
     * 创建日期:   2017/8/23 16:50
     * 方法介绍:   根据前台传入的runId,prcsId,toId,flowPrcs,opFlag,从session中获取users
     * 参数说明:
     * @return
     */
    public ToJson<FlowRunPrcs> entrust(String runId,  String prcsId, String toId,
                                                              String flowPrcs, String opFlag, Users users);


    //工作关注
    public AjaxJson workAttention(Integer runId, String userId, String status);

    //工作结束和工作删除,状态值0为工作结束1为工作删除
    public AjaxJson worDelete(Integer runId, String status);

     public  void  todoWorkSmsBoby( String beginUser,String flowPrcs,String tableName, String runId,String runName,String flowId, String prcsId,String currentPrcsId,String tabId,String topDefault,String smsContent,HttpServletRequest request,String smsType,Users users,String orgadd,String jingbanUser,String viewUser);

    public  void  todoWorkSmsBoby2(String flowPrcs,String tableName, String runId,String runName,String flowId, String prcsId,String currentPrcsId,String tabId,String smsContent,HttpServletRequest request,String smsType,Users users,String orgadd,String jingbanUser,String viewUser);


     public AjaxJson saveHandle(Integer runId, String prcsId, String flowPrcs, Users users);

   /*  //插入一条日志
     public int setFlowRunLog(Integer runId,Integer flowPrcs,String type,String content);*/

    /**
     *
     * @方法描述：重写的todoWorkSmsBoby方法。定时任务自动保存转交的方法，方法不能出现request,需要的值必须得传
     *
     **/
    public  void  todoWorkSmsBobys( String beginUser,String flowPrcs,String tableName, String runId,String runName,String flowId, String prcsId,String currentPrcsId,String tabId,String topDefault,String smsContent,String smsType,Users users,String orgadd,String jingbanUser,String viewUser);

}
